接續昨日寫的文章,今天來探討一下JavaScript中的 parseInt和進位制之間的關係。
問題一、javaScript 中的 parseInt是用來做什麼的?
parseInt 將可以轉成整數的「字串」轉為「整數」,也可以利用它來做進位制的轉換。
例如:
console.log(parseInt("11234happyrrrr"));
//結果為11234,因為這組字串只有11234能被解析為整數
console.log(parseInt("happy11234rrrr"));
//結果為NaN,因為這個字串裡面,第一個字為h,超過進位制範圍,所以停止解析
問題二、parseInt 轉換進位制方式 ?
使用 parseInt(string, radix)
(一)概念一、不提供radix的值:
console.log(parseInt('123')); // 如果沒給radix,默認將數字轉換十進位
// 結果: 123
console.log (parseInt("0x10")); // 十六進位格式的字串,但省略了 radix 参数
// 結果: 16
console.log(parseInt('077'));
// 轉成數字77,解析為十進位,結果為77
console.log(parseInt('1.9'));
// 因為parseInt解析位自動忽略非數字的小數點(.),直接將小數點省略,結果為 1
// 所以小數點要使用parseFloat
console.log(parseInt('ff', 16));
// 將ff轉換為16進位,結果為255
console.log(parseInt('0xFF', 16));
// 轉換為16進位,結果為255,"0x"為16進位前綴詞,意思是parseInt碰到"0x"知道要解析成16進位
console.log(parseInt('xyz'));
// NaN (因為無法轉換為整數)
(二)概念二、提供radix的值:
console.log(parseInt("10", 10)); // radix值為10,使用十進位解析
//结果為10
console.log(parseInt("10", 16)); // radix值為16, 使用十六進位解析
//结果為 16
(三)概念三、radix是什麼?radix
的值必须在 2 到 36 之间。
如果超出2-36之間的範圍,parseInt
後結果為 NaN
(Not a Number)。
console.log(parseInt("123",37)); //結果: NaN
問題三、進位制的前綴詞為何?
0b
開頭,例如:0b1010
表示十進位的 10。0o
或 0
開頭,例如:0o12
或 012
表示十進位的 10。0x
開頭,例如:0x1A
表示十進位的 26。問題四、0開頭的字串在parseInt中屬於哪個進位制?
0x
或 0X
開頭(一個0,後面是小寫或大寫的 X),就會被假定為解析成16進位數字。0o
或 0
開頭console.log(parseInt("0x1A")); //小寫x,解析為十六進位: 26
console.log(parseInt("0X1A")); //大寫x,解析為十六進位: 26
console.log(parseInt(0100));
//因為0開頭的數字,直接由0100轉換為8進位,結果為64
console.log(parseInt("0100", 8));
//結果跟上面一樣,因為radix為8,轉換為8進位,結果為64
console.log(parseInt("0100"));
//默認值解析為十進位制,先將字串0100轉換為數字100,且預設解析為10進位,結果為100
Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt